package cn.lg.soar.system.api.service;

import cn.lg.soar.system.api.model.*;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @author luguoxiang
 * @date 2022/1/2
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public interface IUserApi {

    /**
     * 根据id获取多个用户
     * @param ids
     * @return
     */
    List<UserQueryDTO> listByIds(List<Long> ids);

    /**
     * 根据id获取用户
     * @param userId
     * @return
     */
    UserQueryDTO getById(Long userId);

    /**
     * 根据账号获取用户信息
     * @param accountType 账号类型
     * @param account 账号
     * @return
     */
    UserQueryDTO getByAccount(Integer accountType, String account);

    /**
     * 根据用户名查询
     * @param username
     * @return
     */
    default UserQueryDTO getByUsername(String username) {
        return getByAccount(0, username);
    }

    /**
     * 创建用户
     * @param dto
     * @return
     */
    Long create(UserCreateDTO dto);

    /**
     * 修改用户
     * @param dto
     * @return
     */
    void update(UserUpdateDTO dto);

    /**
     * 账号绑定（绑定手机号、绑定微信openid等）
     * @param dto
     */
    void binding(UserBindDTO dto);

    /**
     * 获取用户当前所有角色
     * @param userId
     * @return
     */
    List<Long> getUserCurrentAllRoleIds(Long userId);

    /**
     * 判断某个用户是否是超级管理员
     * @param username
     * @return
     */
    boolean isSuperAdministrator(String username);

    List<AuthAccountBind> userAccountList(Long userId);

    default Map<Long, UserQueryDTO> mapByIds(List<Long> ids) {
        return listByIds(ids).stream().collect(Collectors.toMap(UserQueryDTO::getId, x -> x));
    }

}
